package org.jeecg.modules.mes.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.mes.entity.MesProductionPlanTask;

import java.util.List;

/**
 * @Description: 生产计划工种任务管理
 * @Author: jeecg-boot
 * @Date: 2025-01-21
 * @Version: V1.0
 */
public interface IMesProductionPlanTaskService extends IService<MesProductionPlanTask> {

    /**
     * 根据计划ID获取任务列表
     * @param planId 计划ID
     * @return 任务列表
     */
    List<MesProductionPlanTask> getTasksByPlanId(String planId);

    /**
     * 提交任务（原开始执行任务）
     * 开始时间设为领取时间，提交时间设为当前时间
     * @param taskId 任务ID
     * @param employeeId 员工ID
     */
    void submitTask(String taskId, String employeeId);

    /**
     * 暂停任务
     * @param taskId 任务ID
     * @param employeeId 员工ID
     */
    void pauseTask(String taskId, String employeeId);

    /**
     * 完成任务
     * @param taskId 任务ID
     * @param employeeId 员工ID
     * @param completedQuantity 完成数量
     * @param remark 备注
     */
    void completeTask(String taskId, String employeeId, Integer completedQuantity, String remark);

    /**
     * 更新任务进度
     * @param taskId 任务ID
     * @param completedQuantity 完成数量
     * @param remark 备注
     */
    void updateTaskProgress(String taskId, Integer completedQuantity, String remark);

    /**
     * 获取员工的任务统计
     * @param employeeId 员工ID
     * @return 任务统计信息
     */
    Object getEmployeeTaskStatistics(String employeeId);

    /**
     * 获取员工可领取的任务列表
     * @param employeeId 员工ID
     * @param workTypeId 工种ID（可选）
     * @return 可领取的任务列表
     */
    List<MesProductionPlanTask> getAvailableTasksForEmployee(String employeeId, String workTypeId);

    /**
     * 员工领取任务
     * @param taskId 任务ID
     * @param employeeId 员工ID
     * @param remark 备注
     */
    void claimTask(String taskId, String employeeId, String remark);

    /**
     * 获取员工的任务列表
     * @param employeeId 员工ID
     * @param status 任务状态（可选）
     * @return 员工任务列表
     */
    List<MesProductionPlanTask> getEmployeeTasks(String employeeId, Integer status);

    /**
     * 恢复暂停的任务
     * @param taskId 任务ID
     * @param employeeId 员工ID
     */
    void resumeTask(String taskId, String employeeId);

    /**
     * 获取员工历史任务列表
     * @param employeeId 员工ID
     * @param pageNo 页码
     * @param pageSize 页大小
     * @return 历史任务列表
     */
    List<MesProductionPlanTask> getEmployeeHistoryTasks(String employeeId, Integer pageNo, Integer pageSize);

    /**
     * 获取按生产计划分组的任务数据
     * @param queryParam 查询参数
     * @param pageNo 页码
     * @param pageSize 页大小
     * @return 分组的任务数据
     */
    Object getGroupedTaskData(MesProductionPlanTask queryParam, Integer pageNo, Integer pageSize);

    /**
     * 批量完成任务
     * @param batchCompleteVO 批量完成任务VO
     */
    void batchCompleteTask(org.jeecg.modules.mes.vo.BatchTaskCompleteVO batchCompleteVO);

    /**
     * 撤回任务
     * @param taskIds 任务ID列表
     * @param employeeId 员工ID
     */
    void withdrawTasks(List<String> taskIds, String employeeId);
}
